pcb密码学库的简单介绍和示例使用
官网:
参考这两篇文章
//* BLS签名: https://crypto.stanford.edu/pbc/manual/ch02.html
#include "PBC.h"
int main() {
//初始化配对变量e
char param[1024];
FILE* file = fopen("a.param", "r");
size_t count = fread(param, 1, 1024, file);
fclose(file);
if (!count)
pbc_die("input error");
// 初始化配对变量e
Pairing e(param, count);
// 生成系统参数g
G2 g(e, false); // TODO 随机初始化一个系统参数g(论文中通常使用生成元)
g.dump(stdout, "system parameter g", 16);
// 生成私钥和公钥
Zr secret_key(e, true); // 生成一个Zr类型的secret_key
secret_key.dump(stdout, "secret key");
G2 public_key = g ^ secret_key; // 指数运算
public_key.dump(stdout, "public key");
// 假设消息m的hash值为 "hashofmessage"
G1 h(e, (void*)"hashofmessage", 13); // 将消息hash值映射到G1元素h
h.dump(stdout, "message hash");
// 对消息m进行签名(对元素h签名)
G1 sig = h ^ secret_key;
sig.dump(stdout, "signature"); // 实际中,可以只输出第一个坐标(但是x坐标对应2个元素-椭圆曲线对称性,配对测试需要2次)
// 验证签名
GT temp1 = e(sig, g); // 配对运算
GT temp2 = e(h, public_key);
cout << endl;
temp1.dump(stdout, "e(sig, g)");
temp2.dump(stdout, "e(h, public_key)");
if (temp1 == temp2)
cout << "signature verifies" << endl;
else
cout << "signature does not verify" << endl;
}
本文链接: PBC|PBCWrapper 密码学库
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
发布日期: 2024-03-06
最新构建: 2024-12-26
欢迎任何与文章内容相关并保持尊重的评论😊 !